package com.wn.mapper;

import com.wn.bean.Building;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * @author yellow Docter
 * @date 2024-06-27
 * @desc 蜗牛创想：www.woniuxy.com
 */
public interface BuildingMapper {

    /**
     *  @Select  mybatis 的查询注解
     *     直接写sql就可以
     *     不需要配置返回结果 方法的返回结果就可以
     *  注意点:
     *     1、如果很复杂的sql 必须用xml来写
     *     2、如果结果集很复杂  需要用 xml 进行 映射
     *     3、xml 和 注解 不建议
     *
     */
    @Select("select * from building")
    List<Building> selectAll();

    @Delete("delete from building where id = #{id}")
    int deleteBuildById(int id);

    @Update("update building set numbers = #{numbers},units = #{units},remarks = #{remarks} where id = #{id} ")
    int updateBuildById(Building building);

    /**
     * sql 写错了 的调式:
     *   1、写单元测试
     *   2、配置sql的日志
     *         sql会在日志控制中输出
     *
     * @param building
     * @return
     */
    @Insert("insert into building (numbers,units,remarks,pic)  values (#{numbers},#{units},#{remarks},#{pic})")
    int addBuild(Building building);

    @Select("select count(*) from building")
    int count();

    /**
     * mybatis 操作SQL 的时候 多个参数如何解决？
     *    1、把多个参数封装成对象 通过对象的属性设置参数
     *    2、添加注解 每个参数设置键值对
     *          @Param("start") int start,@Param("pageSize") int pageSize
     *          sql中通过 #{start}、#{pageSize} 获取参数
     *
     * @param start
     * @param pageSize
     * @return
     */
    @Select("select * from building limit #{start},#{pageSize}")
    List<Building> pageBuilds(@Param("start") int start,@Param("pageSize") int pageSize);

}
